/**
 * 本抽象类定义类注册服务中心提供对外提供的核心功能接口：服务注册，服务发现，参数配置，订阅服务节点变更事件 
 */
class AServiceRegistry {
    param;
    constructor(param) {
        this.param = param;
    }

    /**
     * 获取参数
     * @returns Object 微服务参数
     */
    getParam() {
        return this.param;
    }

    /**
     * 监控注册的服务变更事件,如服务实例加入，移除，配置数据变更
     * @param {Array<String>} services 监控的服务集合
     */
    subscribeEvent(services) {
        console.info("这是父类方法，需要子类实现")
        throw new Error("这是父类方法，需要子类实现");
    }

    /**
     * 根据服务名称获取可访问的一个节点，如果有多个可用节点
     * @param {String} service 服务名称
     * @returns Promise<String> 服务调用地址
     */
    getServiceNode() {
        console.info("这是父类方法，需要子类实现")
        throw new Error("这是父类方法，需要子类实现");
    }

    /**
     * 释放客户端
     */
    close() {
        console.info("这是父类方法，需要子类实现")
        throw new Error("这是父类方法，需要子类实现");
    }
}

module.exports = AServiceRegistry;